﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
//void test1(int arr[])
//{
//	printf("%d\n", sizeof(arr));//4
//}
//void test2(int ch[])
//{
//	printf("%d\n", sizeof(ch));//4
//}
//int main()
//{
//	int arr[10] = { 0 };
//	char ch[10] = { 0 };
//	printf("%d\n", sizeof(arr));//40
//	printf("%d\n", sizeof(ch));//10
//	test1(arr);
//	test2(ch);
//	return 0;
//}

//int main()
//{
//	int i = 0, a = 0, b = 2, c = 3, d = 4;
//	//i = a++ && ++b && d++;当a为假时&&后面的运算就不在运行
//	i = a++ || ++b || d++;//当a为真时就可以停止计算了所以只有计算a就行
//	printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);
//	return 0;
//}


//int main()
//{
//	int a, b, c;
//	a = 5;
//	c = ++a;//6
//	b = ++c,c++, ++a, a++;//逗号表达式只去最后的值a++先把a赋值给b   a=8 b=7 c=8
//	//7   7    8    7    8
//	b += a++ + c;//先a+c+b=23在a++
//	printf("a = %d b = %d c = %d\n:", a, b, c);
//	return 0;
//}
//int main()
//{
//	int num1 = 1;
//	int num2 = 2;
//	num1& num2;
//	num1 | num2;
//	num1^ num2;
//	return 0;
//}


//int main()
//{
//	int m = 0;
//	int n = 0;
//	int i = 0;
//	int x = 0;
//	printf("请输入两个数\n");
//	scanf("%d%d", &n,&m);
//	int count = 0;//计数
//	x = m ^ n;
//	for (i = 0; i < 32; i++)
//	{
//		if (((x >> i)&1)==1)
//			count++;
//	}
//	printf("个数 = %d\n", count);
//	return 0;
//}
//int main()
//{
//	int num = 15;
//	int i = 0;
//	int count = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if (((num >> i) & 1) == 1)
//			count++;
//	}
//	printf("二进制中1的个数 = %d\n", count);
//	return 0;
//}
//int main()
//{
//	int m = 0;
//	scanf("%d", &m);
//	int i = 0;
//	//偶数位
//	printf("偶数位：\n");
//	for (i = 31; i >= 1; i -= 2)
//	{
//		
//		printf("%d ", (m >> i) & 1);
//	}
//	printf("\n");
//	//奇数位
//	printf("奇数位：\n");
//	for (i = 30; i >= 0; i -= 2)
//	{
//		
//		printf("%d ", (m >> i) & 1);
//	}
//	printf("\n");
//	
//	return 0;
//}
//

//int main()
//{
//	int a = 3;
//	int b = 5;
//	printf("交换前a=%d, b=%d\n", a, b);
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	printf("交换后a=%d, b=%d\n", a, b);
//	return 0;
//}

//int main()
//{
//    int arr[] = { 1,2,3,4,5 };
//    short* p = (short*)arr;
//    int i = 0;
//    for (i = 0; i < 4; i++)
//    {
//        *(p + i) = 0;
//    }
//
//    for (i = 0; i < 5; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//    return 0;
//}
//int main()
//{
//    int a = 0x11223344;
//    char* pc = (char*)&a;
//    *pc = 0;
//    printf("%x\n", a);
//    return 0;
//}
//只能对正整数进行二进制位1的数统计无法对负数统计比如-1
//int S_1(int n)
//{
//	int count = 0;
//	while (n)
//	{
//		if (n%2==1)
//		{
//			count++;
//		}
//		n /= 2;//除以2每次的数都变小在进行循环
//	}
//	return count;
//}
//int main()
//{
//	int n = 10;
//	int ret = S_1(n);
//	printf("ret = %d\n", ret);
//	return 0;
//}
//可以统计负数的2进制位数上的1
//int f_1(int n)
//{
//	int m = 0;
//	int count = 0;
//	for (m = 0; m < 32; m++)
//	{
//		if(((n >> m) & 1) == 1);
//		count++;
//	}
//	return count;
//}
//int main()
//{
//	int n = -1;
//	int ret = f_1(n);
//	printf("ret =%d\n", ret);
//	return 0;
//}
//优化之后的结果
//int t_1(int n)
//{
//	int s = 0;
//	int count = 0;
//	while (n)
//	{
//		n = n & (n - 1);按位与
//		count++;
//	}
//	return count;
//}
//int main()
//{
//	int n = -1;
//	int ret = t_1(n);
//	printf("ret=%d\n", ret);
//	return 0;
//}
//求两个整数2进制中不同的数有几个
//int main()
//{
//	int n = 1999;
//	int m = 2299;
//	int a = 0;
//	int count = 0;
//	for(a=0;a<32;a++)
//	{
//		if (((n >> a) & 1) != ((m >> a) & 1))
//		{
//			count++;
//		}
//	}
//	printf("%d\n", count);
//	return 0;
//}

